package electronet.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import electronet.excepcion.DAOExcepcion;
import electronet.modelo.CompraCabecera;
import electronet.modelo.CompraDetalle;
import electronet.modelo.Persona;
import electronet.util.ConexionBD;

public class CompraCabeceraDAO {
	
	public CompraCabecera InsertarCompraCab(CompraCabecera comp) throws DAOExcepcion {
		String query = "insert into compracabecera (fechaCompra,Total,IdComprador) values (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
						
			stmt.setDate(1, new java.sql.Date(comp.getFechacompra().getTime() ));
			stmt.setDouble(2, comp.getTotal());
			stmt.setInt(3, comp.getIdcomprador());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			comp.setIdcompra(id);
			
			// insertar Detalle			
			for(CompraDetalle detalle : comp.getDetalles()){
			
				query  = "insert into compradetalle(idcompra, idproducto, cantidad,precio, subtotal, comentario) values(?,?,?,?,?,?)";
				stmt = con.prepareStatement(query);
				
				stmt.setInt(1, id);
				stmt.setInt(2, detalle.getIdproducto());
				stmt.setDouble(3, detalle.getCantidad());
				stmt.setDouble(4, detalle.getPrecio());
				stmt.setDouble(5, detalle.getSubtotal());
				stmt.setString(6, detalle.getComentario());
				
				i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo insertar");
				}
				
			}
			
			

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());

		}
		return comp;
	}
	


	public CompraCabecera obtener(int idCompra) throws DAOExcepcion {
		CompraCabecera comp = new CompraCabecera();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idcompra,fechaCompra,Total,IdComprador "
							+ "from compracabecera where idcompra=?";			
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			rs = stmt.executeQuery();
			if (rs.next()) {
				comp.setIdcompra(rs.getInt(1));
				//comp.setFechacompra((Date) rs.getDate(2));
				comp.setTotal(rs.getDouble(3));
				comp.setIdcomprador(rs.getInt(4));				
				comp.setIdcompra(idCompra);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
	
		}
		return comp;
	}

	public void eliminarCompCab(int idCompra) throws DAOExcepcion {
		String query = "delete from compracabecera WHERE idcompra=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCompra);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
	}

	
}